package com.xj.algorithm.leetcode;

/**
 * 移除链表元素
 */
public class L203_移除链表中的指定值的节点 {

    /**
     *删除链表中等于给定值 val 的所有节点。
     *
     * 示例:
     *
     * 输入: 1->2->6->3->4->5->6, val = 6
     * 输出: 1->2->3->4->5
     */

    public static void main(String[] args) {
        ListNode root=new ListNode(1);
        root.next=new ListNode(2);
        root.next.next=new ListNode(6);
        root.next.next.next=new ListNode(3);
        root.next.next.next.next=new ListNode(4);
        root.next.next.next.next.next=new ListNode(5);
        root.next.next.next.next.next.next=new ListNode(6);
        ListNode result=removeElementsGood(root,6);
        while (result!=null){
            System.out.print(result.val+"->");
            result=result.next;
        }
        System.out.println();


        ListNode root2=new ListNode(1);
        root2.next=new ListNode(1);
        ListNode result2=removeElementsGood(root2,1);
        while (result2!=null){
            System.out.print(result2.val+"->");
            result2=result2.next;
        }
        System.out.println();
    }

    //自己的解法；增加头节点，判断next的值
    public static ListNode removeElements(ListNode head, int val) {
        ListNode root=new ListNode(0);
        root.next=head;
        ListNode index=root;
        while (index!=null){
            if(index.next!=null && index.next.val==val){
                index.next=index.next.next;
                continue;
            }
            index=index.next;
        }
        return root.next;
    }

    //精彩解法：递归
    public static ListNode removeElementsGood(ListNode head, int val) {
        if(head==null)
            return null;
        head.next=removeElements(head.next,val);
        if(head.val==val){
            return head.next;
        }else{
            return head;
        }
    }

}